package com.ruoyi.system.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import com.ruoyi.system.domain.ChatMessage;

/**
 * 聊天消息Mapper接口
 * 
 * @author ruoyi
 */
public interface ChatMessageMapper 
{
    /**
     * 查询聊天消息
     * 
     * @param id 聊天消息主键
     * @return 聊天消息
     */
    public ChatMessage selectChatMessageById(Long id);

    /**
     * 查询聊天消息列表
     * 
     * @param chatMessage 聊天消息
     * @return 聊天消息集合
     */
    public List<ChatMessage> selectChatMessageList(ChatMessage chatMessage);

    /**
     * 查询用户的聊天历史记录
     * 
     * @param userId 用户ID
     * @param serviceId 客服ID
     * @param startIndex 起始索引
     * @param pageSize 每页记录数
     * @return 聊天消息集合
     */
    public List<ChatMessage> selectChatHistory(@Param("userId") String userId, @Param("serviceId") String serviceId, 
            @Param("startIndex") int startIndex, @Param("pageSize") int pageSize);

    /**
     * 查询用户的未读消息数量
     * 
     * @param userId 用户ID
     * @return 未读消息数量
     */
    public int selectUnreadCount(String userId);
    
    /**
     * 查询与客服有过聊天记录的用户列表
     * 
     * @param serviceId 客服ID
     * @param nickName 用户昵称（可选，用于搜索）
     * @return 用户列表
     */
    public List<Map<String, Object>> selectChatUserList(@Param("serviceId") String serviceId, @Param("nickName") String nickName);

    /**
     * 新增聊天消息
     * 
     * @param chatMessage 聊天消息
     * @return 结果
     */
    public int insertChatMessage(ChatMessage chatMessage);

    /**
     * 修改聊天消息
     * 
     * @param chatMessage 聊天消息
     * @return 结果
     */
    public int updateChatMessage(ChatMessage chatMessage);

    /**
     * 删除聊天消息
     * 
     * @param id 聊天消息主键
     * @return 结果
     */
    public int deleteChatMessageById(Long id);

    /**
     * 批量删除聊天消息
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteChatMessageByIds(Long[] ids);
    
    /**
     * 标记用户发给客服的所有消息为已读
     * 
     * @param userId 用户ID
     * @param serviceId 客服ID
     * @return 结果
     */
    public int markUserMessagesAsRead(@Param("userId") String userId, @Param("serviceId") String serviceId);
    
    /**
     * 更新消息发送状态
     * 
     * @param messageId 消息ID
     * @param sendStatus 发送状态
     * @return 结果
     */
    public int updateMessageSendStatus(@Param("messageId") Long messageId, @Param("sendStatus") String sendStatus);
} 